using System;
using System.Drawing;
using Microsoft.DirectX;

namespace MetaWorld 
{

	/// <summary>
	/// This class is a Meta procedure wrapper for a color value.
	/// </summary>
	public class ColorWrapper : Meta.CallInterfaceProcedure 
	{
		/// <summary>
		/// Public color variable.
		/// </summary>
		public Color Color;

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="c">Initial color value</param>
		public ColorWrapper (Color c) 
		{
			this.Color = c;
		}

		/// <summary>
		/// Constructor
		/// </summary>
		public ColorWrapper () : this (Color.White) { }

		/// <summary>
		/// Override the no-argument function call.
		/// </summary>
		/// <returns></returns>
		public override object Call()
		{
			return this.Color;
		}

	}

	

	/// <summary>
	/// This class is a Meta procedure wrapper for a vector.
	/// </summary>
	public class VectorWrapper : Meta.CallInterfaceProcedure 
	{
		/// <summary>
		/// Public color variable.
		/// </summary>
		public Vector3 Vector;

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="v">Initial vector value</param>
		public VectorWrapper (Vector3 v) 
		{
			this.Vector = v;
		}

		/// <summary>
		/// Constructor
		/// </summary>
		public VectorWrapper () : 
			this (new Vector3 (0f, 0f, 0f)) 
		{ }

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="x"></param>
		/// <param name="y"></param>
		/// <param name="z"></param>
		public VectorWrapper (double x, double y, double z) : 
			this (new Vector3 ((float) x, (float) y, (float) z))
		{ }


		/// <summary>
		/// Override the no-argument function call.
		/// </summary>
		/// <returns></returns>
		public override object Call()
		{
			return this.Vector;
		}

	}


}